/*******************************************************************
 * author   :  Charlies-ls
 * Date     :  2021-09-26
 * Function :  string utils
 * Copyright (c) 2021. artestplay@outlook.com. All Rights Reserved.
 *******************************************************************/

#ifndef AX_STRING_H
#define AX_STRING_H
#include <stdio.h>
#include <inttypes.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef struct ax_string ax_string;
typedef struct ax_list ax_list;


ax_string* ax_string_create(size_t len);
void       ax_string_destory(ax_string* s);

ax_string* ax_string_attach_buf(char* buf, size_t buf_size);
ax_string* ax_string_attach(char* s);

size_t     ax_string_reserve(ax_string* s, size_t size);
void       ax_string_append(ax_string* s, char c);
char       ax_string_at(ax_string* s, size_t index);
void       ax_string_clear(ax_string* s);
size_t     ax_string_length(const ax_string* s);
size_t     ax_string_size(const ax_string* s);
const char*ax_string_data(const ax_string* s);
bool       ax_string_match(const ax_string* s, const char* other);
bool       ax_string_cat(const ax_string* s, const char* other);
void       ax_string_trim(ax_string* str, const char* sep);
ax_string* ax_string_copy(const char* other);
ax_string* ax_string_format(const char* format, ...);
ax_list*   ax_string_split(const ax_string* s, const char* sep);



ax_string* ax_string_format1(const char* format, ...);
ax_string* ax_string_format2(const char* format, ...);


char* ax_format(const char* format, ...);
char* ax_format1(const char* format, ...);
char* ax_format2(const char* format, ...);

ax_list* ax_split(const char* str, const char* sep);

#ifdef __cplusplus
}
#endif

#endif
